package com.ctshk.rpc.hotel.service;

import com.ctshk.common.dto.Result;
import com.ctshk.common.model.TokenUser;
import com.ctshk.rpc.hotel.dto.*;
import com.ctshk.rpc.hotel.req.GetAllNCNBRoomByCodeReq;
import com.ctshk.rpc.hotel.req.HotelSearchReq;
import com.ctshk.rpc.hotel.req.NCNBHotelCreateOrderReq;
import com.ctshk.rpc.hotel.req.RatePlanSearchReq;

import java.math.BigDecimal;
import java.util.List;

/**
    * <p>
    * 龙腾接口类方法
    * </p>
    * @author yinhuan
    * @since 2021-03-03
*/
public interface INCNBHotelService {
    /**
     * 初始化酒店信息
     * @return
     */
    Result initialize();
    /**
     * 拉取全部龙腾API酒店
     *
     * @param tokenUser
     */
    Result saveAPINCNBHotel(HotelSearchReq req, List<AffiliatedGroup> affiliatedGroups,TokenUser tokenUser, Integer allowPackage, BigDecimal reserveCharge, BigDecimal refundCharge, Integer reserveChargeType, Integer refundChargeType);

    /**
     * 拉取全部龙腾API酒店房间
     *
     * @param user
     */
    Result saveAPINCNBHotelRoom(GetAllNCNBRoomByCodeReq GetAllNCNBRoomByCodeReq, TokenUser user, Integer allowPackage, BigDecimal reserveCharge, BigDecimal refundCharge, Integer reserveChargeType, Integer refundChargeType);

    /**
     * 保存龙腾酒店静态数据
     *
     * @param user
     * @param actionName
     */
    Result saveNTStaticInfo(String actionName, TokenUser user);

    /**
     * 龙腾捷旅下单校验
     *
     * @param req
     */
    Result<PreBookingCheckDTO> createOrderPre(NCNBHotelCreateOrderReq req);

    /**
     * 龙腾捷旅下单
     *
     * @param ncnbHotelCreateOrderReq
     */
    Result<BookingCheckDTO> createOrder(NCNBHotelCreateOrderReq ncnbHotelCreateOrderReq);

    /**
     * 龙腾捷旅酒店城市查询
     * @return
     */
    List<CNHotelAreaDTO> queryHotelCityList();

    /**
     * 龙腾捷旅酒店品牌查询
     * @return
     */
    List<AffiliatedGroup> queryAffiliatedGroup();

    /**
     * 龙腾酒店价格计划/价格库存查询
     * @return
     */
    List<RatePlanSearchDTO> queryRatePlanSearch(RatePlanSearchReq req);

    /**
     * 取消龙腾酒店下单
     * @param orderId
     * @param currentUser
     * @return
     */
    Result<BookingCheckDTO> bookingCancel(String orderId, TokenUser currentUser);
}